package com.qing.design.patterns.chain_of_responsibility.example.middleware;

/**
 * ConcreteHandler.检查失败的登录请求是否过多。
 */
public class ThrottlingMiddleware extends  Middleware{

	//请求许可证许可证
	private int requestPerMinute;

	private int request;

	private long currentTime;


	public ThrottlingMiddleware(int requestPerMinute) {
		this.requestPerMinute = requestPerMinute;
		this.currentTime=System.currentTimeMillis();
	}

	/**
	 * 请不要在开头插入checkNext（）调用
	 * *最后对这种方法进行了总结。
	 * *
	 * *这比所有中间件上的简单循环提供了更多的灵活性
	 * *对象。例如，链的一个元素可以更改
	 * *通过在所有其他检查之后运行其检查来进行检查。
	 * @param email
	 * @param password
	 * @return
	 */
	@Override
	public boolean check(String email, String password) {
		if(System.currentTimeMillis()>currentTime+60_000){
			request=0;
			currentTime=System.currentTimeMillis();
		}
		request++;
		if(request>requestPerMinute){
			System.out.println("超出请求限制！");
			Thread.currentThread().stop();;
		}
		return checkNext(email, password);
	}
}
